package gruppe5.dame.client.gui.Lobby;

import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.TitledBorder;
/**
 * UI Element: Liste mit allen Spielern auf dem Server
 * @author kramerse
 *
 */
public class Userlist extends JPanel implements MouseListener {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = -9080621004987301410L;
	
	/**
	 * GUI Listenelement
	 */
	JList list;
	
	/**
	 * LobbyGUI
	 */
	private LobbyGUI lobby;
	
	/**
	 * Speichert die Zeit des letzen Klicks
	 */
	private long lastClick;

	/**
	 * Erstellt UI Element Userliste
	 * @param lobby Lobby UI Element
	 */
	public Userlist(LobbyGUI lobby) {
		this.lobby = lobby;
		list = new JList();
		list.setPreferredSize(new Dimension(215, 1));
		JScrollPane scrollPane = new JScrollPane(list);
		scrollPane.setPreferredSize(new Dimension(235, 525));
		list.addMouseListener(this);
		this.add(scrollPane);
		this.setBorder(new TitledBorder("Spieler Liste"));
		this.setPreferredSize(new Dimension(250, 1));
	}
	
	/**
	 * Setzt die Liste mit den Benutzern
	 */
	public void setList(String[] user) {
		this.list.setListData(user);
	}

	@Override
	public void mouseClicked(MouseEvent e) {
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}

	@Override
	public void mousePressed(MouseEvent e) {
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		//Keine Aktion wenn auf den eigenen Namen geklickt wurde
		String username = lobby.getUsername();
		String clickedName = (String) list.getSelectedValue();
		if(clickedName.equals(username))
		{
			lobby.disableJoinAndInvite();
			return;
		}
		
		/*
		 * Abfrage auf Doppelklick
		 */
		try {
			if(System.currentTimeMillis()-lastClick<250) {
				String var = (String) list.getSelectedValue();
				lobby.sendInvite(var);
			}
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		lastClick = System.currentTimeMillis();
		lobby.enableGamelist(false);
	}
	
	/**
	 * 
	 * @return ausgew&auml;hlter Benutzername
	 */
	public String getSelectedUserName() {
		String var = (String) list.getSelectedValue();
		return var;
	}
}